/* global config, JitsiMeetJS */

// Load the integration of a third-party analytics API such as Google Analytics.
// Since we cannot guarantee the quality of the third-party service (e.g. their
// server may take noticeably long time to respond), it is in our best interest
// (in the sense that the intergration of the analytics API is important to us
// but not enough to allow it to prevent people from joining a conference) to
// download the API asynchronously. Additionally, Google Analytics will download
// its implementation asynchronously anyway so it makes sense to append the
// loading on our side rather than prepend it.
if (config.disableThirdPartyRequests !== true) {
    JitsiMeetJS.util.ScriptUtil.loadScript(
            'analytics.js?v=1',
            /* async */ true,
            /* prepend */ false);
}

class NoopAnalytics {
    sendEvent () {}
}

// XXX Since we asynchronously load the integration of the analytics API and the
// analytics API may asynchronously load its implementation (e.g. Google
// Analytics), we cannot make the decision with respect to which analytics
// implementation we will use here and we have to postpone it i.e. we will make
// a lazy decision.

class AnalyticsAdapter {
    constructor () {
    }

    sendEvent (...args) {
        var a = this.analytics;

        if (a === null || typeof a === 'undefined') {
            var AnalyticsImpl = window.Analytics || NoopAnalytics;

            this.analytics = a = new AnalyticsImpl();
        }
        try {
            a.sendEvent(...args);
        } catch (ignored) {}
    }
}

export default new AnalyticsAdapter();
